home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / alsa / pcm.h < prev    next >
C/C++ Source or Header  |  2006-01-09  |  49KB  |  1,095 lines

  1. /**
  2.  * \file include/pcm.h
  3.  * \brief Application interface library for the ALSA driver
  4.  * \author Jaroslav Kysela <perex@suse.cz>
  5.  * \author Abramo Bagnara <abramo@alsa-project.org>
  6.  * \author Takashi Iwai <tiwai@suse.de>
  7.  * \date 1998-2001
  8.  *
  9.  * Application interface library for the ALSA driver.
  10.  * See the \ref pcm page for more details.
  11.  */
  12. /*
  13.  *   This library is free software; you can redistribute it and/or modify
  14.  *   it under the terms of the GNU Lesser General Public License as
  15.  *   published by the Free Software Foundation; either version 2.1 of
  16.  *   the License, or (at your option) any later version.
  17.  *
  18.  *   This program is distributed in the hope that it will be useful,
  19.  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21.  *   GNU Lesser General Public License for more details.
  22.  *
  23.  *   You should have received a copy of the GNU Lesser General Public
  24.  *   License along with this library; if not, write to the Free Software
  25.  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  26.  *
  27.  */
  28.  
  29. #ifndef __ALSA_PCM_H
  30. #define __ALSA_PCM_H
  31.  
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35.  
  36. /**
  37.  *  \defgroup PCM PCM Interface
  38.  *  See the \ref pcm page for more details.
  39.  *  \{
  40.  */
  41.  
  42. /** dlsym version for interface entry callback */
  43. #define SND_PCM_DLSYM_VERSION        _dlsym_pcm_001
  44.  
  45. /** PCM generic info container */
  46. typedef struct _snd_pcm_info snd_pcm_info_t;
  47. /** PCM hardware configuration space container */
  48. typedef struct _snd_pcm_hw_params snd_pcm_hw_params_t;
  49. /** PCM software configuration container */
  50. typedef struct _snd_pcm_sw_params snd_pcm_sw_params_t;
  51. /** PCM status container */
  52.  typedef struct _snd_pcm_status snd_pcm_status_t;
  53. /** PCM access types mask */
  54. typedef struct _snd_pcm_access_mask snd_pcm_access_mask_t;
  55. /** PCM formats mask */
  56. typedef struct _snd_pcm_format_mask snd_pcm_format_mask_t;
  57. /** PCM subformats mask */
  58. typedef struct _snd_pcm_subformat_mask snd_pcm_subformat_mask_t;
  59.  
  60. /** PCM class */
  61. typedef enum _snd_pcm_class {
  62.     /** standard device */
  63.  
  64.     SND_PCM_CLASS_GENERIC = 0,
  65.     /** multichannel device */
  66.     SND_PCM_CLASS_MULTI,
  67.     /** software modem device */
  68.     SND_PCM_CLASS_MODEM,
  69.     /** digitizer device */
  70.     SND_PCM_CLASS_DIGITIZER,
  71.     SND_PCM_CLASS_LAST = SND_PCM_CLASS_DIGITIZER
  72. } snd_pcm_class_t;
  73.  
  74. /** PCM subclass */
  75. typedef enum _snd_pcm_subclass {
  76.     /** subdevices are mixed together */
  77.     SND_PCM_SUBCLASS_GENERIC_MIX = 0,
  78.     /** multichannel subdevices are mixed together */
  79.     SND_PCM_SUBCLASS_MULTI_MIX,
  80.     SND_PCM_SUBCLASS_LAST = SND_PCM_SUBCLASS_MULTI_MIX
  81. } snd_pcm_subclass_t;
  82.  
  83. /** PCM stream (direction) */
  84. typedef enum _snd_pcm_stream {
  85.     /** Playback stream */
  86.     SND_PCM_STREAM_PLAYBACK = 0,
  87.     /** Capture stream */
  88.     SND_PCM_STREAM_CAPTURE,
  89.     SND_PCM_STREAM_LAST = SND_PCM_STREAM_CAPTURE
  90. } snd_pcm_stream_t;
  91.  
  92. /** PCM access type */
  93. typedef enum _snd_pcm_access {
  94.     /** mmap access with simple interleaved channels */
  95.     SND_PCM_ACCESS_MMAP_INTERLEAVED = 0,
  96.     /** mmap access with simple non interleaved channels */
  97.     SND_PCM_ACCESS_MMAP_NONINTERLEAVED,
  98.     /** mmap access with complex placement */
  99.     SND_PCM_ACCESS_MMAP_COMPLEX,
  100.     /** snd_pcm_readi/snd_pcm_writei access */
  101.     SND_PCM_ACCESS_RW_INTERLEAVED,
  102.     /** snd_pcm_readn/snd_pcm_writen access */
  103.     SND_PCM_ACCESS_RW_NONINTERLEAVED,
  104.     SND_PCM_ACCESS_LAST = SND_PCM_ACCESS_RW_NONINTERLEAVED
  105. } snd_pcm_access_t;
  106.  
  107. /** PCM sample format */
  108. typedef enum _snd_pcm_format {
  109.     /** Unknown */
  110.     SND_PCM_FORMAT_UNKNOWN = -1,
  111.     /** Signed 8 bit */
  112.     SND_PCM_FORMAT_S8 = 0,
  113.     /** Unsigned 8 bit */
  114.     SND_PCM_FORMAT_U8,
  115.     /** Signed 16 bit Little Endian */
  116.     SND_PCM_FORMAT_S16_LE,
  117.     /** Signed 16 bit Big Endian */
  118.     SND_PCM_FORMAT_S16_BE,
  119.     /** Unsigned 16 bit Little Endian */
  120.     SND_PCM_FORMAT_U16_LE,
  121.     /** Unsigned 16 bit Big Endian */
  122.     SND_PCM_FORMAT_U16_BE,
  123.     /** Signed 24 bit Little Endian */
  124.     SND_PCM_FORMAT_S24_LE,
  125.     /** Signed 24 bit Big Endian */
  126.     SND_PCM_FORMAT_S24_BE,
  127.     /** Unsigned 24 bit Little Endian */
  128.     SND_PCM_FORMAT_U24_LE,
  129.     /** Unsigned 24 bit Big Endian */
  130.     SND_PCM_FORMAT_U24_BE,
  131.     /** Signed 32 bit Little Endian */
  132.     SND_PCM_FORMAT_S32_LE,
  133.     /** Signed 32 bit Big Endian */
  134.     SND_PCM_FORMAT_S32_BE,
  135.     /** Unsigned 32 bit Little Endian */
  136.     SND_PCM_FORMAT_U32_LE,
  137.     /** Unsigned 32 bit Big Endian */
  138.     SND_PCM_FORMAT_U32_BE,
  139.     /** Float 32 bit Little Endian, Range -1.0 to 1.0 */
  140.     SND_PCM_FORMAT_FLOAT_LE,
  141.     /** Float 32 bit Big Endian, Range -1.0 to 1.0 */
  142.     SND_PCM_FORMAT_FLOAT_BE,
  143.     /** Float 64 bit Little Endian, Range -1.0 to 1.0 */
  144.     SND_PCM_FORMAT_FLOAT64_LE,
  145.     /** Float 64 bit Big Endian, Range -1.0 to 1.0 */
  146.     SND_PCM_FORMAT_FLOAT64_BE,
  147.     /** IEC-958 Little Endian */
  148.     SND_PCM_FORMAT_IEC958_SUBFRAME_LE,
  149.     /** IEC-958 Big Endian */
  150.     SND_PCM_FORMAT_IEC958_SUBFRAME_BE,
  151.     /** Mu-Law */
  152.     SND_PCM_FORMAT_MU_LAW,
  153.     /** A-Law */
  154.     SND_PCM_FORMAT_A_LAW,
  155.     /** Ima-ADPCM */
  156.     SND_PCM_FORMAT_IMA_ADPCM,
  157.     /** MPEG */
  158.     SND_PCM_FORMAT_MPEG,
  159.     /** GSM */
  160.     SND_PCM_FORMAT_GSM,
  161.     /** Special */
  162.     SND_PCM_FORMAT_SPECIAL = 31,
  163.     /** Signed 24bit Little Endian in 3bytes format */
  164.     SND_PCM_FORMAT_S24_3LE = 32,
  165.     /** Signed 24bit Big Endian in 3bytes format */
  166.     SND_PCM_FORMAT_S24_3BE,
  167.     /** Unsigned 24bit Little Endian in 3bytes format */
  168.     SND_PCM_FORMAT_U24_3LE,
  169.     /** Unsigned 24bit Big Endian in 3bytes format */
  170.     SND_PCM_FORMAT_U24_3BE,
  171.     /** Signed 20bit Little Endian in 3bytes format */
  172.     SND_PCM_FORMAT_S20_3LE,
  173.     /** Signed 20bit Big Endian in 3bytes format */
  174.     SND_PCM_FORMAT_S20_3BE,
  175.     /** Unsigned 20bit Little Endian in 3bytes format */
  176.     SND_PCM_FORMAT_U20_3LE,
  177.     /** Unsigned 20bit Big Endian in 3bytes format */
  178.     SND_PCM_FORMAT_U20_3BE,
  179.     /** Signed 18bit Little Endian in 3bytes format */
  180.     SND_PCM_FORMAT_S18_3LE,
  181.     /** Signed 18bit Big Endian in 3bytes format */
  182.     SND_PCM_FORMAT_S18_3BE,
  183.     /** Unsigned 18bit Little Endian in 3bytes format */
  184.     SND_PCM_FORMAT_U18_3LE,
  185.     /** Unsigned 18bit Big Endian in 3bytes format */
  186.     SND_PCM_FORMAT_U18_3BE,
  187.     SND_PCM_FORMAT_LAST = SND_PCM_FORMAT_U18_3BE,
  188.  
  189. #if __BYTE_ORDER == __LITTLE_ENDIAN
  190.     /** Signed 16 bit CPU endian */
  191.     SND_PCM_FORMAT_S16 = SND_PCM_FORMAT_S16_LE,
  192.     /** Unsigned 16 bit CPU endian */
  193.     SND_PCM_FORMAT_U16 = SND_PCM_FORMAT_U16_LE,
  194.     /** Signed 24 bit CPU endian */
  195.     SND_PCM_FORMAT_S24 = SND_PCM_FORMAT_S24_LE,
  196.     /** Unsigned 24 bit CPU endian */
  197.     SND_PCM_FORMAT_U24 = SND_PCM_FORMAT_U24_LE,
  198.     /** Signed 32 bit CPU endian */
  199.     SND_PCM_FORMAT_S32 = SND_PCM_FORMAT_S32_LE,
  200.     /** Unsigned 32 bit CPU endian */
  201.     SND_PCM_FORMAT_U32 = SND_PCM_FORMAT_U32_LE,
  202.     /** Float 32 bit CPU endian */
  203.     SND_PCM_FORMAT_FLOAT = SND_PCM_FORMAT_FLOAT_LE,
  204.     /** Float 64 bit CPU endian */
  205.     SND_PCM_FORMAT_FLOAT64 = SND_PCM_FORMAT_FLOAT64_LE,
  206.     /** IEC-958 CPU Endian */
  207.     SND_PCM_FORMAT_IEC958_SUBFRAME = SND_PCM_FORMAT_IEC958_SUBFRAME_LE
  208. #elif __BYTE_ORDER == __BIG_ENDIAN
  209.     /** Signed 16 bit CPU endian */
  210.     SND_PCM_FORMAT_S16 = SND_PCM_FORMAT_S16_BE,
  211.     /** Unsigned 16 bit CPU endian */
  212.     SND_PCM_FORMAT_U16 = SND_PCM_FORMAT_U16_BE,
  213.     /** Signed 24 bit CPU endian */
  214.     SND_PCM_FORMAT_S24 = SND_PCM_FORMAT_S24_BE,
  215.     /** Unsigned 24 bit CPU endian */
  216.     SND_PCM_FORMAT_U24 = SND_PCM_FORMAT_U24_BE,
  217.     /** Signed 32 bit CPU endian */
  218.     SND_PCM_FORMAT_S32 = SND_PCM_FORMAT_S32_BE,
  219.     /** Unsigned 32 bit CPU endian */
  220.     SND_PCM_FORMAT_U32 = SND_PCM_FORMAT_U32_BE,
  221.     /** Float 32 bit CPU endian */
  222.     SND_PCM_FORMAT_FLOAT = SND_PCM_FORMAT_FLOAT_BE,
  223.     /** Float 64 bit CPU endian */
  224.     SND_PCM_FORMAT_FLOAT64 = SND_PCM_FORMAT_FLOAT64_BE,
  225.     /** IEC-958 CPU Endian */
  226.     SND_PCM_FORMAT_IEC958_SUBFRAME = SND_PCM_FORMAT_IEC958_SUBFRAME_BE
  227. #else
  228. #error "Unknown endian"
  229. #endif
  230. } snd_pcm_format_t;
  231.  
  232. /** PCM sample subformat */
  233. typedef enum _snd_pcm_subformat {
  234.     /** Standard */
  235.     SND_PCM_SUBFORMAT_STD = 0,
  236.     SND_PCM_SUBFORMAT_LAST = SND_PCM_SUBFORMAT_STD
  237. } snd_pcm_subformat_t;
  238.  
  239. /** PCM state */
  240. typedef enum _snd_pcm_state {
  241.     /** Open */
  242.     SND_PCM_STATE_OPEN = 0,
  243.     /** Setup installed */ 
  244.     SND_PCM_STATE_SETUP,
  245.     /** Ready to start */
  246.     SND_PCM_STATE_PREPARED,
  247.     /** Running */
  248.     SND_PCM_STATE_RUNNING,
  249.     /** Stopped: underrun (playback) or overrun (capture) detected */
  250.     SND_PCM_STATE_XRUN,
  251.     /** Draining: running (playback) or stopped (capture) */
  252.     SND_PCM_STATE_DRAINING,
  253.     /** Paused */
  254.     SND_PCM_STATE_PAUSED,
  255.     /** Hardware is suspended */
  256.     SND_PCM_STATE_SUSPENDED,
  257.     /** Hardware is disconnected */
  258.     SND_PCM_STATE_DISCONNECTED,
  259.     SND_PCM_STATE_LAST = SND_PCM_STATE_DISCONNECTED
  260. } snd_pcm_state_t;
  261.  
  262. /** PCM start mode */
  263. typedef enum _snd_pcm_start {
  264.     /** Automatic start on data read/write */
  265.     SND_PCM_START_DATA = 0,
  266.     /** Explicit start */
  267.     SND_PCM_START_EXPLICIT,
  268.     SND_PCM_START_LAST = SND_PCM_START_EXPLICIT
  269. } snd_pcm_start_t;
  270.  
  271. /** PCM xrun mode */
  272. typedef enum _snd_pcm_xrun {
  273.     /** Xrun detection disabled */
  274.     SND_PCM_XRUN_NONE = 0,
  275.     /** Stop on xrun detection */
  276.     SND_PCM_XRUN_STOP,
  277.     SND_PCM_XRUN_LAST = SND_PCM_XRUN_STOP
  278. } snd_pcm_xrun_t;
  279.  
  280. /** PCM timestamp mode */
  281. typedef enum _snd_pcm_tstamp {
  282.     /** No timestamp */
  283.     SND_PCM_TSTAMP_NONE = 0,
  284.     /** Update mmap'ed timestamp */
  285.     SND_PCM_TSTAMP_MMAP,
  286.     SND_PCM_TSTAMP_LAST = SND_PCM_TSTAMP_MMAP
  287. } snd_pcm_tstamp_t;
  288.  
  289. /** Unsigned frames quantity */
  290. typedef unsigned long snd_pcm_uframes_t;
  291. /** Signed frames quantity */
  292. typedef long snd_pcm_sframes_t;
  293.  
  294. /** Non blocking mode (flag for open mode) \hideinitializer */
  295. #define SND_PCM_NONBLOCK        0x0001
  296. /** Async notification (flag for open mode) \hideinitializer */
  297. #define SND_PCM_ASYNC            0x0002
  298.  
  299. /** PCM handle */
  300. typedef struct _snd_pcm snd_pcm_t;
  301.  
  302. /** PCM type */
  303. enum _snd_pcm_type {
  304.     /** Kernel level PCM */
  305.     SND_PCM_TYPE_HW = 0,
  306.     /** Hooked PCM */
  307.     SND_PCM_TYPE_HOOKS,
  308.     /** One or more linked PCM with exclusive access to selected
  309.         channels */
  310.     SND_PCM_TYPE_MULTI,
  311.     /** File writing plugin */
  312.     SND_PCM_TYPE_FILE,
  313.     /** Null endpoint PCM */
  314.     SND_PCM_TYPE_NULL,
  315.     /** Shared memory client PCM */
  316.     SND_PCM_TYPE_SHM,
  317.     /** INET client PCM (not yet implemented) */
  318.     SND_PCM_TYPE_INET,
  319.     /** Copying plugin */
  320.     SND_PCM_TYPE_COPY,
  321.     /** Linear format conversion PCM */
  322.     SND_PCM_TYPE_LINEAR,
  323.     /** A-Law format conversion PCM */
  324.     SND_PCM_TYPE_ALAW,
  325.     /** Mu-Law format conversion PCM */
  326.     SND_PCM_TYPE_MULAW,
  327.     /** IMA-ADPCM format conversion PCM */
  328.     SND_PCM_TYPE_ADPCM,
  329.     /** Rate conversion PCM */
  330.     SND_PCM_TYPE_RATE,
  331.     /** Attenuated static route PCM */
  332.     SND_PCM_TYPE_ROUTE,
  333.     /** Format adjusted PCM */
  334.     SND_PCM_TYPE_PLUG,
  335.     /** Sharing PCM */
  336.     SND_PCM_TYPE_SHARE,
  337.     /** Meter plugin */
  338.     SND_PCM_TYPE_METER,
  339.     /** Mixing PCM */
  340.     SND_PCM_TYPE_MIX,
  341.     /** Attenuated dynamic route PCM (not yet implemented) */
  342.     SND_PCM_TYPE_DROUTE,
  343.     /** Loopback server plugin (not yet implemented) */
  344.     SND_PCM_TYPE_LBSERVER,
  345.     /** Linear Integer <-> Linear Float format conversion PCM */
  346.     SND_PCM_TYPE_LINEAR_FLOAT,
  347.     /** LADSPA integration plugin */
  348.     SND_PCM_TYPE_LADSPA,
  349.     /** Direct Mixing plugin */
  350.     SND_PCM_TYPE_DMIX,
  351.     /** Jack Audio Connection Kit plugin */
  352.     SND_PCM_TYPE_JACK,
  353.     /** Direct Snooping plugin */
  354.     SND_PCM_TYPE_DSNOOP,
  355.     /** Direct Sharing plugin */
  356.     SND_PCM_TYPE_DSHARE,
  357.     /** IEC958 subframe plugin */
  358.     SND_PCM_TYPE_IEC958,
  359.     /** Soft volume plugin */
  360.     SND_PCM_TYPE_SOFTVOL,
  361.     /** External I/O plugin */
  362.     SND_PCM_TYPE_IOPLUG,
  363.     /** External filter plugin */
  364.     SND_PCM_TYPE_EXTPLUG,
  365.     SND_PCM_TYPE_LAST = SND_PCM_TYPE_EXTPLUG
  366. };
  367.  
  368. /** PCM type */
  369. typedef enum _snd_pcm_type snd_pcm_type_t;
  370.  
  371. /** PCM area specification */
  372. typedef struct _snd_pcm_channel_area {
  373.     /** base address of channel samples */
  374.     void *addr;
  375.     /** offset to first sample in bits */
  376.     unsigned int first;
  377.     /** samples distance in bits */
  378.     unsigned int step;
  379. } snd_pcm_channel_area_t;
  380.  
  381. /** PCM synchronization ID */
  382. typedef union _snd_pcm_sync_id {
  383.     /** 8-bit ID */
  384.     unsigned char id[16];
  385.     /** 16-bit ID */
  386.     unsigned short id16[8];
  387.     /** 32-bit ID */
  388.     unsigned int id32[4];
  389. } snd_pcm_sync_id_t;
  390.  
  391. /** #SND_PCM_TYPE_METER scope handle */
  392. typedef struct _snd_pcm_scope snd_pcm_scope_t;
  393.  
  394. int snd_pcm_open(snd_pcm_t **pcm, const char *name, 
  395.          snd_pcm_stream_t stream, int mode);
  396. int snd_pcm_open_lconf(snd_pcm_t **pcm, const char *name, 
  397.                snd_pcm_stream_t stream, int mode,
  398.                snd_config_t *lconf);
  399.  
  400. int snd_pcm_close(snd_pcm_t *pcm);
  401. const char *snd_pcm_name(snd_pcm_t *pcm);
  402. snd_pcm_type_t snd_pcm_type(snd_pcm_t *pcm);
  403. snd_pcm_stream_t snd_pcm_stream(snd_pcm_t *pcm);
  404. int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm);
  405. int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space);
  406. int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents);
  407. int snd_pcm_nonblock(snd_pcm_t *pcm, int nonblock);
  408. int snd_async_add_pcm_handler(snd_async_handler_t **handler, snd_pcm_t *pcm, 
  409.                   snd_async_callback_t callback, void *private_data);
  410. snd_pcm_t *snd_async_handler_get_pcm(snd_async_handler_t *handler);
  411. int snd_pcm_info(snd_pcm_t *pcm, snd_pcm_info_t *info);
  412. int snd_pcm_hw_params_current(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
  413. int snd_pcm_hw_params(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
  414. int snd_pcm_hw_free(snd_pcm_t *pcm);
  415. int snd_pcm_sw_params_current(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
  416. int snd_pcm_sw_params(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
  417. int snd_pcm_prepare(snd_pcm_t *pcm);
  418. int snd_pcm_reset(snd_pcm_t *pcm);
  419. int snd_pcm_status(snd_pcm_t *pcm, snd_pcm_status_t *status);
  420. int snd_pcm_start(snd_pcm_t *pcm);
  421. int snd_pcm_drop(snd_pcm_t *pcm);
  422. int snd_pcm_drain(snd_pcm_t *pcm);
  423. int snd_pcm_pause(snd_pcm_t *pcm, int enable);
  424. snd_pcm_state_t snd_pcm_state(snd_pcm_t *pcm);
  425. int snd_pcm_hwsync(snd_pcm_t *pcm);
  426. int snd_pcm_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp);
  427. int snd_pcm_resume(snd_pcm_t *pcm);
  428. snd_pcm_sframes_t snd_pcm_avail_update(snd_pcm_t *pcm);
  429. snd_pcm_sframes_t snd_pcm_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames);
  430. snd_pcm_sframes_t snd_pcm_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames);
  431. snd_pcm_sframes_t snd_pcm_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
  432. snd_pcm_sframes_t snd_pcm_readi(snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size);
  433. snd_pcm_sframes_t snd_pcm_writen(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);
  434. snd_pcm_sframes_t snd_pcm_readn(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);
  435. int snd_pcm_wait(snd_pcm_t *pcm, int timeout);
  436.  
  437. int snd_pcm_link(snd_pcm_t *pcm1, snd_pcm_t *pcm2);
  438. int snd_pcm_unlink(snd_pcm_t *pcm);
  439.  
  440. /** \} */
  441.  
  442. /**
  443.  * \defgroup PCM_Info Stream Information
  444.  * \ingroup PCM
  445.  * See the \ref pcm page for more details.
  446.  * \{
  447.  */
  448.  
  449. size_t snd_pcm_info_sizeof(void);
  450. /** \hideinitializer
  451.  * \brief allocate an invalid #snd_pcm_info_t using standard alloca
  452.  * \param ptr returned pointer
  453.  */
  454. #define snd_pcm_info_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_info_t *) alloca(snd_pcm_info_sizeof()); memset(*ptr, 0, snd_pcm_info_sizeof()); } while (0)
  455. int snd_pcm_info_malloc(snd_pcm_info_t **ptr);
  456. void snd_pcm_info_free(snd_pcm_info_t *obj);
  457. void snd_pcm_info_copy(snd_pcm_info_t *dst, const snd_pcm_info_t *src);
  458. unsigned int snd_pcm_info_get_device(const snd_pcm_info_t *obj);
  459. unsigned int snd_pcm_info_get_subdevice(const snd_pcm_info_t *obj);
  460. snd_pcm_stream_t snd_pcm_info_get_stream(const snd_pcm_info_t *obj);
  461. int snd_pcm_info_get_card(const snd_pcm_info_t *obj);
  462. const char *snd_pcm_info_get_id(const snd_pcm_info_t *obj);
  463. const char *snd_pcm_info_get_name(const snd_pcm_info_t *obj);
  464. const char *snd_pcm_info_get_subdevice_name(const snd_pcm_info_t *obj);
  465. snd_pcm_class_t snd_pcm_info_get_class(const snd_pcm_info_t *obj);
  466. snd_pcm_subclass_t snd_pcm_info_get_subclass(const snd_pcm_info_t *obj);
  467. unsigned int snd_pcm_info_get_subdevices_count(const snd_pcm_info_t *obj);
  468. unsigned int snd_pcm_info_get_subdevices_avail(const snd_pcm_info_t *obj);
  469. snd_pcm_sync_id_t snd_pcm_info_get_sync(const snd_pcm_info_t *obj);
  470. void snd_pcm_info_set_device(snd_pcm_info_t *obj, unsigned int val);
  471. void snd_pcm_info_set_subdevice(snd_pcm_info_t *obj, unsigned int val);
  472. void snd_pcm_info_set_stream(snd_pcm_info_t *obj, snd_pcm_stream_t val);
  473.  
  474. /** \} */
  475.  
  476. /**
  477.  * \defgroup PCM_HW_Params Hardware Parameters
  478.  * \ingroup PCM
  479.  * See the \ref pcm page for more details.
  480.  * \{
  481.  */
  482.  
  483. int snd_pcm_hw_params_any(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
  484.  
  485. int snd_pcm_hw_params_can_mmap_sample_resolution(const snd_pcm_hw_params_t *params);
  486. int snd_pcm_hw_params_is_double(const snd_pcm_hw_params_t *params);
  487. int snd_pcm_hw_params_is_batch(const snd_pcm_hw_params_t *params);
  488. int snd_pcm_hw_params_is_block_transfer(const snd_pcm_hw_params_t *params);
  489. int snd_pcm_hw_params_can_overrange(const snd_pcm_hw_params_t *params);
  490. int snd_pcm_hw_params_can_pause(const snd_pcm_hw_params_t *params);
  491. int snd_pcm_hw_params_can_resume(const snd_pcm_hw_params_t *params);
  492. int snd_pcm_hw_params_is_half_duplex(const snd_pcm_hw_params_t *params);
  493. int snd_pcm_hw_params_is_joint_duplex(const snd_pcm_hw_params_t *params);
  494. int snd_pcm_hw_params_can_sync_start(const snd_pcm_hw_params_t *params);
  495. int snd_pcm_hw_params_get_rate_numden(const snd_pcm_hw_params_t *params,
  496.                       unsigned int *rate_num,
  497.                       unsigned int *rate_den);
  498. int snd_pcm_hw_params_get_sbits(const snd_pcm_hw_params_t *params);
  499. int snd_pcm_hw_params_get_fifo_size(const snd_pcm_hw_params_t *params);
  500.  
  501. #if 0
  502. typedef struct _snd_pcm_hw_strategy snd_pcm_hw_strategy_t;
  503.  
  504. /* choices need to be sorted on ascending badness */
  505. typedef struct _snd_pcm_hw_strategy_simple_choices_list {
  506.     unsigned int value;
  507.     unsigned int badness;
  508. } snd_pcm_hw_strategy_simple_choices_list_t;
  509.  
  510. int snd_pcm_hw_params_strategy(snd_pcm_t *pcm, snd_pcm_hw_params_t *params,
  511.                    const snd_pcm_hw_strategy_t *strategy,
  512.                    unsigned int badness_min,
  513.                    unsigned int badness_max);
  514.  
  515. void snd_pcm_hw_strategy_free(snd_pcm_hw_strategy_t *strategy);
  516. int snd_pcm_hw_strategy_simple(snd_pcm_hw_strategy_t **strategyp,
  517.                    unsigned int badness_min,
  518.                    unsigned int badness_max);
  519. int snd_pcm_hw_params_try_explain_failure(snd_pcm_t *pcm,
  520.                       snd_pcm_hw_params_t *fail,
  521.                       snd_pcm_hw_params_t *success,
  522.                       unsigned int depth,
  523.                       snd_output_t *out);
  524.  
  525. #endif
  526.  
  527. size_t snd_pcm_hw_params_sizeof(void);
  528. /** \hideinitializer
  529.  * \brief allocate an invalid #snd_pcm_hw_params_t using standard alloca
  530.  * \param ptr returned pointer
  531.  */
  532. #define snd_pcm_hw_params_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_hw_params_t *) alloca(snd_pcm_hw_params_sizeof()); memset(*ptr, 0, snd_pcm_hw_params_sizeof()); } while (0)
  533. int snd_pcm_hw_params_malloc(snd_pcm_hw_params_t **ptr);
  534. void snd_pcm_hw_params_free(snd_pcm_hw_params_t *obj);
  535. void snd_pcm_hw_params_copy(snd_pcm_hw_params_t *dst, const snd_pcm_hw_params_t *src);
  536.  
  537. #if !defined(ALSA_LIBRARY_BUILD) && !defined(ALSA_PCM_OLD_HW_PARAMS_API)
  538.  
  539. int snd_pcm_hw_params_get_access(const snd_pcm_hw_params_t *params, snd_pcm_access_t *_access);
  540. int snd_pcm_hw_params_test_access(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t _access);
  541. int snd_pcm_hw_params_set_access(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t _access);
  542. int snd_pcm_hw_params_set_access_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t *_access);
  543. int snd_pcm_hw_params_set_access_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t *_access);
  544. int snd_pcm_hw_params_set_access_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_mask_t *mask);
  545. int snd_pcm_hw_params_get_access_mask(snd_pcm_hw_params_t *params, snd_pcm_access_mask_t *mask);
  546.  
  547. int snd_pcm_hw_params_get_format(const snd_pcm_hw_params_t *params, snd_pcm_format_t *val);
  548. int snd_pcm_hw_params_test_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
  549. int snd_pcm_hw_params_set_format(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
  550. int snd_pcm_hw_params_set_format_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t *format);
  551. int snd_pcm_hw_params_set_format_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t *format);
  552. int snd_pcm_hw_params_set_format_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_mask_t *mask);
  553. void snd_pcm_hw_params_get_format_mask(snd_pcm_hw_params_t *params, snd_pcm_format_mask_t *mask);
  554.  
  555. int snd_pcm_hw_params_get_subformat(const snd_pcm_hw_params_t *params, snd_pcm_subformat_t *subformat);
  556. int snd_pcm_hw_params_test_subformat(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t subformat);
  557. int snd_pcm_hw_params_set_subformat(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t subformat);
  558. int snd_pcm_hw_params_set_subformat_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t *subformat);
  559. int snd_pcm_hw_params_set_subformat_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_t *subformat);
  560. int snd_pcm_hw_params_set_subformat_mask(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_subformat_mask_t *mask);
  561. void snd_pcm_hw_params_get_subformat_mask(snd_pcm_hw_params_t *params, snd_pcm_subformat_mask_t *mask);
  562.  
  563. int snd_pcm_hw_params_get_channels(const snd_pcm_hw_params_t *params, unsigned int *val);
  564. int snd_pcm_hw_params_get_channels_min(const snd_pcm_hw_params_t *params, unsigned int *val);
  565. int snd_pcm_hw_params_get_channels_max(const snd_pcm_hw_params_t *params, unsigned int *val);
  566. int snd_pcm_hw_params_test_channels(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
  567. int snd_pcm_hw_params_set_channels(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
  568. int snd_pcm_hw_params_set_channels_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  569. int snd_pcm_hw_params_set_channels_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  570. int snd_pcm_hw_params_set_channels_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, unsigned int *max);
  571. int snd_pcm_hw_params_set_channels_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  572. int snd_pcm_hw_params_set_channels_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  573. int snd_pcm_hw_params_set_channels_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  574.  
  575. int snd_pcm_hw_params_get_rate(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  576. int snd_pcm_hw_params_get_rate_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  577. int snd_pcm_hw_params_get_rate_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  578. int snd_pcm_hw_params_test_rate(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  579. int snd_pcm_hw_params_set_rate(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  580. int snd_pcm_hw_params_set_rate_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  581. int snd_pcm_hw_params_set_rate_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  582. int snd_pcm_hw_params_set_rate_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
  583. int snd_pcm_hw_params_set_rate_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  584. int snd_pcm_hw_params_set_rate_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  585. int snd_pcm_hw_params_set_rate_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  586. int snd_pcm_hw_params_set_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
  587. int snd_pcm_hw_params_get_rate_resample(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  588. int snd_pcm_hw_params_set_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
  589. int snd_pcm_hw_params_get_export_buffer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val);
  590.  
  591. int snd_pcm_hw_params_get_period_time(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  592. int snd_pcm_hw_params_get_period_time_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  593. int snd_pcm_hw_params_get_period_time_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  594. int snd_pcm_hw_params_test_period_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  595. int snd_pcm_hw_params_set_period_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  596. int snd_pcm_hw_params_set_period_time_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  597. int snd_pcm_hw_params_set_period_time_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  598. int snd_pcm_hw_params_set_period_time_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
  599. int snd_pcm_hw_params_set_period_time_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  600. int snd_pcm_hw_params_set_period_time_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  601. int snd_pcm_hw_params_set_period_time_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  602.  
  603. int snd_pcm_hw_params_get_period_size(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
  604. int snd_pcm_hw_params_get_period_size_min(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
  605. int snd_pcm_hw_params_get_period_size_max(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *frames, int *dir);
  606. int snd_pcm_hw_params_test_period_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val, int dir);
  607. int snd_pcm_hw_params_set_period_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val, int dir);
  608. int snd_pcm_hw_params_set_period_size_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
  609. int snd_pcm_hw_params_set_period_size_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
  610. int snd_pcm_hw_params_set_period_size_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *min, int *mindir, snd_pcm_uframes_t *max, int *maxdir);
  611. int snd_pcm_hw_params_set_period_size_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
  612. int snd_pcm_hw_params_set_period_size_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
  613. int snd_pcm_hw_params_set_period_size_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val, int *dir);
  614. int snd_pcm_hw_params_set_period_size_integer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
  615.  
  616. int snd_pcm_hw_params_get_periods(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  617. int snd_pcm_hw_params_get_periods_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  618. int snd_pcm_hw_params_get_periods_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  619. int snd_pcm_hw_params_test_periods(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  620. int snd_pcm_hw_params_set_periods(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  621. int snd_pcm_hw_params_set_periods_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  622. int snd_pcm_hw_params_set_periods_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  623. int snd_pcm_hw_params_set_periods_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
  624. int snd_pcm_hw_params_set_periods_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  625. int snd_pcm_hw_params_set_periods_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  626. int snd_pcm_hw_params_set_periods_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  627. int snd_pcm_hw_params_set_periods_integer(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
  628.  
  629. int snd_pcm_hw_params_get_buffer_time(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  630. int snd_pcm_hw_params_get_buffer_time_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  631. int snd_pcm_hw_params_get_buffer_time_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  632. int snd_pcm_hw_params_test_buffer_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  633. int snd_pcm_hw_params_set_buffer_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  634. int snd_pcm_hw_params_set_buffer_time_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  635. int snd_pcm_hw_params_set_buffer_time_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  636. int snd_pcm_hw_params_set_buffer_time_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
  637. int snd_pcm_hw_params_set_buffer_time_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  638. int snd_pcm_hw_params_set_buffer_time_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  639. int snd_pcm_hw_params_set_buffer_time_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  640.  
  641. int snd_pcm_hw_params_get_buffer_size(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  642. int snd_pcm_hw_params_get_buffer_size_min(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  643. int snd_pcm_hw_params_get_buffer_size_max(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  644. int snd_pcm_hw_params_test_buffer_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val);
  645. int snd_pcm_hw_params_set_buffer_size(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t val);
  646. int snd_pcm_hw_params_set_buffer_size_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  647. int snd_pcm_hw_params_set_buffer_size_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  648. int snd_pcm_hw_params_set_buffer_size_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *min, snd_pcm_uframes_t *max);
  649. int snd_pcm_hw_params_set_buffer_size_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  650. int snd_pcm_hw_params_set_buffer_size_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  651. int snd_pcm_hw_params_set_buffer_size_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  652.  
  653. int snd_pcm_hw_params_get_tick_time(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  654. int snd_pcm_hw_params_get_tick_time_min(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  655. int snd_pcm_hw_params_get_tick_time_max(const snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  656. int snd_pcm_hw_params_test_tick_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  657. int snd_pcm_hw_params_set_tick_time(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val, int dir);
  658. int snd_pcm_hw_params_set_tick_time_min(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  659. int snd_pcm_hw_params_set_tick_time_max(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  660. int snd_pcm_hw_params_set_tick_time_minmax(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *min, int *mindir, unsigned int *max, int *maxdir);
  661. int snd_pcm_hw_params_set_tick_time_near(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  662. int snd_pcm_hw_params_set_tick_time_first(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  663. int snd_pcm_hw_params_set_tick_time_last(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
  664.  
  665. #endif /* !ALSA_LIBRARY_BUILD && !ALSA_PCM_OLD_HW_PARAMS_API */
  666.  
  667. int snd_pcm_hw_params_get_min_align(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
  668.  
  669. /** \} */
  670.  
  671. /**
  672.  * \defgroup PCM_SW_Params Software Parameters
  673.  * \ingroup PCM
  674.  * See the \ref pcm page for more details.
  675.  * \{
  676.  */
  677.  
  678. size_t snd_pcm_sw_params_sizeof(void);
  679. /** \hideinitializer
  680.  * \brief allocate an invalid #snd_pcm_sw_params_t using standard alloca
  681.  * \param ptr returned pointer
  682.  */
  683. #define snd_pcm_sw_params_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_sw_params_t *) alloca(snd_pcm_sw_params_sizeof()); memset(*ptr, 0, snd_pcm_sw_params_sizeof()); } while (0)
  684. int snd_pcm_sw_params_malloc(snd_pcm_sw_params_t **ptr);
  685. void snd_pcm_sw_params_free(snd_pcm_sw_params_t *obj);
  686. void snd_pcm_sw_params_copy(snd_pcm_sw_params_t *dst, const snd_pcm_sw_params_t *src);
  687. int snd_pcm_sw_params_get_boundary(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
  688.  
  689. #if !defined(ALSA_LIBRARY_BUILD) && !defined(ALSA_PCM_OLD_SW_PARAMS_API)
  690.  
  691. int snd_pcm_sw_params_set_tstamp_mode(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_tstamp_t val);
  692. int snd_pcm_sw_params_get_tstamp_mode(const snd_pcm_sw_params_t *params, snd_pcm_tstamp_t *val);
  693. int snd_pcm_sw_params_set_sleep_min(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, unsigned int val);
  694. int snd_pcm_sw_params_get_sleep_min(const snd_pcm_sw_params_t *params, unsigned int *val);
  695. int snd_pcm_sw_params_set_avail_min(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
  696. int snd_pcm_sw_params_get_avail_min(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
  697. int snd_pcm_sw_params_set_xfer_align(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
  698. int snd_pcm_sw_params_get_xfer_align(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
  699. int snd_pcm_sw_params_set_start_threshold(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
  700. int snd_pcm_sw_params_get_start_threshold(const snd_pcm_sw_params_t *paramsm, snd_pcm_uframes_t *val);
  701. int snd_pcm_sw_params_set_stop_threshold(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
  702. int snd_pcm_sw_params_get_stop_threshold(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
  703. int snd_pcm_sw_params_set_silence_threshold(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
  704. int snd_pcm_sw_params_get_silence_threshold(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
  705. int snd_pcm_sw_params_set_silence_size(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
  706. int snd_pcm_sw_params_get_silence_size(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
  707.  
  708. #endif /* !ALSA_LIBRARY_BUILD && !ALSA_PCM_OLD_SW_PARAMS_API */
  709.  
  710. /** \} */
  711.  
  712. /* include old API */
  713. #ifndef ALSA_LIBRARY_BUILD
  714. #if defined(ALSA_PCM_OLD_HW_PARAMS_API) || defined(ALSA_PCM_OLD_SW_PARAMS_API)
  715. #include "pcm_old.h"
  716. #endif
  717. #endif
  718.  
  719. /**
  720.  * \defgroup PCM_Access Access Mask Functions
  721.  * \ingroup PCM
  722.  * See the \ref pcm page for more details.
  723.  * \{
  724.  */
  725.  
  726. size_t snd_pcm_access_mask_sizeof(void);
  727. /** \hideinitializer
  728.  * \brief allocate an empty #snd_pcm_access_mask_t using standard alloca
  729.  * \param ptr returned pointer
  730.  */
  731. #define snd_pcm_access_mask_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_access_mask_t *) alloca(snd_pcm_access_mask_sizeof()); memset(*ptr, 0, snd_pcm_access_mask_sizeof()); } while (0)
  732. int snd_pcm_access_mask_malloc(snd_pcm_access_mask_t **ptr);
  733. void snd_pcm_access_mask_free(snd_pcm_access_mask_t *obj);
  734. void snd_pcm_access_mask_copy(snd_pcm_access_mask_t *dst, const snd_pcm_access_mask_t *src);
  735. void snd_pcm_access_mask_none(snd_pcm_access_mask_t *mask);
  736. void snd_pcm_access_mask_any(snd_pcm_access_mask_t *mask);
  737. int snd_pcm_access_mask_test(const snd_pcm_access_mask_t *mask, snd_pcm_access_t val);
  738. int snd_pcm_access_mask_empty(const snd_pcm_access_mask_t *mask);
  739. void snd_pcm_access_mask_set(snd_pcm_access_mask_t *mask, snd_pcm_access_t val);
  740. void snd_pcm_access_mask_reset(snd_pcm_access_mask_t *mask, snd_pcm_access_t val);
  741.  
  742. /** \} */
  743.  
  744. /**
  745.  * \defgroup PCM_Format Format Mask Functions
  746.  * \ingroup PCM
  747.  * See the \ref pcm page for more details.
  748.  * \{
  749.  */
  750.  
  751. size_t snd_pcm_format_mask_sizeof(void);
  752. /** \hideinitializer
  753.  * \brief allocate an empty #snd_pcm_format_mask_t using standard alloca
  754.  * \param ptr returned pointer
  755.  */
  756. #define snd_pcm_format_mask_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_format_mask_t *) alloca(snd_pcm_format_mask_sizeof()); memset(*ptr, 0, snd_pcm_format_mask_sizeof()); } while (0)
  757. int snd_pcm_format_mask_malloc(snd_pcm_format_mask_t **ptr);
  758. void snd_pcm_format_mask_free(snd_pcm_format_mask_t *obj);
  759. void snd_pcm_format_mask_copy(snd_pcm_format_mask_t *dst, const snd_pcm_format_mask_t *src);
  760. void snd_pcm_format_mask_none(snd_pcm_format_mask_t *mask);
  761. void snd_pcm_format_mask_any(snd_pcm_format_mask_t *mask);
  762. int snd_pcm_format_mask_test(const snd_pcm_format_mask_t *mask, snd_pcm_format_t val);
  763. int snd_pcm_format_mask_empty(const snd_pcm_format_mask_t *mask);
  764. void snd_pcm_format_mask_set(snd_pcm_format_mask_t *mask, snd_pcm_format_t val);
  765. void snd_pcm_format_mask_reset(snd_pcm_format_mask_t *mask, snd_pcm_format_t val);
  766.  
  767. /** \} */
  768.  
  769. /**
  770.  * \defgroup PCM_SubFormat Subformat Mask Functions
  771.  * \ingroup PCM
  772.  * See the \ref pcm page for more details.
  773.  * \{
  774.  */
  775.  
  776. size_t snd_pcm_subformat_mask_sizeof(void);
  777. /** \hideinitializer
  778.  * \brief allocate an empty #snd_pcm_subformat_mask_t using standard alloca
  779.  * \param ptr returned pointer
  780.  */
  781. #define snd_pcm_subformat_mask_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_subformat_mask_t *) alloca(snd_pcm_subformat_mask_sizeof()); memset(*ptr, 0, snd_pcm_subformat_mask_sizeof()); } while (0)
  782. int snd_pcm_subformat_mask_malloc(snd_pcm_subformat_mask_t **ptr);
  783. void snd_pcm_subformat_mask_free(snd_pcm_subformat_mask_t *obj);
  784. void snd_pcm_subformat_mask_copy(snd_pcm_subformat_mask_t *dst, const snd_pcm_subformat_mask_t *src);
  785. void snd_pcm_subformat_mask_none(snd_pcm_subformat_mask_t *mask);
  786. void snd_pcm_subformat_mask_any(snd_pcm_subformat_mask_t *mask);
  787. int snd_pcm_subformat_mask_test(const snd_pcm_subformat_mask_t *mask, snd_pcm_subformat_t val);
  788. int snd_pcm_subformat_mask_empty(const snd_pcm_subformat_mask_t *mask);
  789. void snd_pcm_subformat_mask_set(snd_pcm_subformat_mask_t *mask, snd_pcm_subformat_t val);
  790. void snd_pcm_subformat_mask_reset(snd_pcm_subformat_mask_t *mask, snd_pcm_subformat_t val);
  791.  
  792. /** \} */
  793.  
  794. /**
  795.  * \defgroup PCM_Status Status Functions
  796.  * \ingroup PCM
  797.  * See the \ref pcm page for more details.
  798.  * \{
  799.  */
  800.  
  801. size_t snd_pcm_status_sizeof(void);
  802. /** \hideinitializer
  803.  * \brief allocate an invalid #snd_pcm_status_t using standard alloca
  804.  * \param ptr returned pointer
  805.  */
  806. #define snd_pcm_status_alloca(ptr) do { assert(ptr); *ptr = (snd_pcm_status_t *) alloca(snd_pcm_status_sizeof()); memset(*ptr, 0, snd_pcm_status_sizeof()); } while (0)
  807. int snd_pcm_status_malloc(snd_pcm_status_t **ptr);
  808. void snd_pcm_status_free(snd_pcm_status_t *obj);
  809. void snd_pcm_status_copy(snd_pcm_status_t *dst, const snd_pcm_status_t *src);
  810. snd_pcm_state_t snd_pcm_status_get_state(const snd_pcm_status_t *obj);
  811. void snd_pcm_status_get_trigger_tstamp(const snd_pcm_status_t *obj, snd_timestamp_t *ptr);
  812. void snd_pcm_status_get_trigger_htstamp(const snd_pcm_status_t *obj, snd_htimestamp_t *ptr);
  813. void snd_pcm_status_get_tstamp(const snd_pcm_status_t *obj, snd_timestamp_t *ptr);
  814. void snd_pcm_status_get_htstamp(const snd_pcm_status_t *obj, snd_htimestamp_t *ptr);
  815. snd_pcm_sframes_t snd_pcm_status_get_delay(const snd_pcm_status_t *obj);
  816. snd_pcm_uframes_t snd_pcm_status_get_avail(const snd_pcm_status_t *obj);
  817. snd_pcm_uframes_t snd_pcm_status_get_avail_max(const snd_pcm_status_t *obj);
  818. snd_pcm_uframes_t snd_pcm_status_get_overrange(const snd_pcm_status_t *obj);
  819.  
  820. /** \} */
  821.  
  822. /**
  823.  * \defgroup PCM_Description Description Functions
  824.  * \ingroup PCM
  825.  * See the \ref pcm page for more details.
  826.  * \{
  827.  */
  828.  
  829. const char *snd_pcm_type_name(snd_pcm_type_t type);
  830. const char *snd_pcm_stream_name(const snd_pcm_stream_t stream);
  831. const char *snd_pcm_access_name(const snd_pcm_access_t _access);
  832. const char *snd_pcm_format_name(const snd_pcm_format_t format);
  833. const char *snd_pcm_format_description(const snd_pcm_format_t format);
  834. const char *snd_pcm_subformat_name(const snd_pcm_subformat_t subformat);
  835. const char *snd_pcm_subformat_description(const snd_pcm_subformat_t subformat);
  836. snd_pcm_format_t snd_pcm_format_value(const char* name);
  837. const char *snd_pcm_tstamp_mode_name(const snd_pcm_tstamp_t mode);
  838. const char *snd_pcm_state_name(const snd_pcm_state_t state);
  839.  
  840. /** \} */
  841.  
  842. /**
  843.  * \defgroup PCM_Dump Debug Functions
  844.  * \ingroup PCM
  845.  * See the \ref pcm page for more details.
  846.  * \{
  847.  */
  848.  
  849. int snd_pcm_dump(snd_pcm_t *pcm, snd_output_t *out);
  850. int snd_pcm_dump_hw_setup(snd_pcm_t *pcm, snd_output_t *out);
  851. int snd_pcm_dump_sw_setup(snd_pcm_t *pcm, snd_output_t *out);
  852. int snd_pcm_dump_setup(snd_pcm_t *pcm, snd_output_t *out);
  853. int snd_pcm_hw_params_dump(snd_pcm_hw_params_t *params, snd_output_t *out);
  854. int snd_pcm_sw_params_dump(snd_pcm_sw_params_t *params, snd_output_t *out);
  855. int snd_pcm_status_dump(snd_pcm_status_t *status, snd_output_t *out);
  856.  
  857. /** \} */
  858.  
  859. /**
  860.  * \defgroup PCM_Direct Direct Access (MMAP) Functions
  861.  * \ingroup PCM
  862.  * See the \ref pcm page for more details.
  863.  * \{
  864.  */
  865.  
  866. int snd_pcm_mmap_begin(snd_pcm_t *pcm,
  867.                const snd_pcm_channel_area_t **areas,
  868.                snd_pcm_uframes_t *offset,
  869.                snd_pcm_uframes_t *frames);
  870. snd_pcm_sframes_t snd_pcm_mmap_commit(snd_pcm_t *pcm,
  871.                       snd_pcm_uframes_t offset,
  872.                       snd_pcm_uframes_t frames);
  873. snd_pcm_sframes_t snd_pcm_mmap_writei(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
  874. snd_pcm_sframes_t snd_pcm_mmap_readi(snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size);
  875. snd_pcm_sframes_t snd_pcm_mmap_writen(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);
  876. snd_pcm_sframes_t snd_pcm_mmap_readn(snd_pcm_t *pcm, void **bufs, snd_pcm_uframes_t size);                                                                
  877.  
  878. /** \} */
  879.  
  880. /**
  881.  * \defgroup PCM_Helpers Helper Functions
  882.  * \ingroup PCM
  883.  * See the \ref pcm page for more details.
  884.  * \{
  885.  */
  886.  
  887. int snd_pcm_format_signed(snd_pcm_format_t format);
  888. int snd_pcm_format_unsigned(snd_pcm_format_t format);
  889. int snd_pcm_format_linear(snd_pcm_format_t format);
  890. int snd_pcm_format_float(snd_pcm_format_t format);
  891. int snd_pcm_format_little_endian(snd_pcm_format_t format);
  892. int snd_pcm_format_big_endian(snd_pcm_format_t format);
  893. int snd_pcm_format_cpu_endian(snd_pcm_format_t format);
  894. int snd_pcm_format_width(snd_pcm_format_t format);            /* in bits */
  895. int snd_pcm_format_physical_width(snd_pcm_format_t format);        /* in bits */
  896. snd_pcm_format_t snd_pcm_build_linear_format(int width, int pwidth, int unsignd, int big_endian);
  897. ssize_t snd_pcm_format_size(snd_pcm_format_t format, size_t samples);
  898. u_int8_t snd_pcm_format_silence(snd_pcm_format_t format);
  899. u_int16_t snd_pcm_format_silence_16(snd_pcm_format_t format);
  900. u_int32_t snd_pcm_format_silence_32(snd_pcm_format_t format);
  901. u_int64_t snd_pcm_format_silence_64(snd_pcm_format_t format);
  902. int snd_pcm_format_set_silence(snd_pcm_format_t format, void *buf, unsigned int samples);
  903.  
  904. snd_pcm_sframes_t snd_pcm_bytes_to_frames(snd_pcm_t *pcm, ssize_t bytes);
  905. ssize_t snd_pcm_frames_to_bytes(snd_pcm_t *pcm, snd_pcm_sframes_t frames);
  906. long snd_pcm_bytes_to_samples(snd_pcm_t *pcm, ssize_t bytes);
  907. ssize_t snd_pcm_samples_to_bytes(snd_pcm_t *pcm, long samples);
  908.  
  909. int snd_pcm_area_silence(const snd_pcm_channel_area_t *dst_channel, snd_pcm_uframes_t dst_offset,
  910.              unsigned int samples, snd_pcm_format_t format);
  911. int snd_pcm_areas_silence(const snd_pcm_channel_area_t *dst_channels, snd_pcm_uframes_t dst_offset,
  912.               unsigned int channels, snd_pcm_uframes_t frames, snd_pcm_format_t format);
  913. int snd_pcm_area_copy(const snd_pcm_channel_area_t *dst_channel, snd_pcm_uframes_t dst_offset,
  914.               const snd_pcm_channel_area_t *src_channel, snd_pcm_uframes_t src_offset,
  915.               unsigned int samples, snd_pcm_format_t format);
  916. int snd_pcm_areas_copy(const snd_pcm_channel_area_t *dst_channels, snd_pcm_uframes_t dst_offset,
  917.                const snd_pcm_channel_area_t *src_channels, snd_pcm_uframes_t src_offset,
  918.                unsigned int channels, snd_pcm_uframes_t frames, snd_pcm_format_t format);
  919.  
  920. /** \} */
  921.  
  922. /**
  923.  * \defgroup PCM_Hook Hook Extension
  924.  * \ingroup PCM
  925.  * See the \ref pcm page for more details.
  926.  * \{
  927.  */
  928.  
  929. /** type of pcm hook */
  930. typedef enum _snd_pcm_hook_type {
  931.     SND_PCM_HOOK_TYPE_HW_PARAMS = 0,
  932.     SND_PCM_HOOK_TYPE_HW_FREE,
  933.     SND_PCM_HOOK_TYPE_CLOSE,
  934.     SND_PCM_HOOK_TYPE_LAST = SND_PCM_HOOK_TYPE_CLOSE
  935. } snd_pcm_hook_type_t;
  936.  
  937. /** PCM hook container */
  938. typedef struct _snd_pcm_hook snd_pcm_hook_t;
  939. /** PCM hook callback function */
  940. typedef int (*snd_pcm_hook_func_t)(snd_pcm_hook_t *hook);
  941. snd_pcm_t *snd_pcm_hook_get_pcm(snd_pcm_hook_t *hook);
  942. void *snd_pcm_hook_get_private(snd_pcm_hook_t *hook);
  943. void snd_pcm_hook_set_private(snd_pcm_hook_t *hook, void *private_data);
  944. int snd_pcm_hook_add(snd_pcm_hook_t **hookp, snd_pcm_t *pcm,
  945.              snd_pcm_hook_type_t type,
  946.              snd_pcm_hook_func_t func, void *private_data);
  947. int snd_pcm_hook_remove(snd_pcm_hook_t *hook);
  948.  
  949. /** \} */
  950.  
  951. /**
  952.  * \defgroup PCM_Scope Scope Plugin Extension
  953.  * \ingroup PCM
  954.  * See the \ref pcm page for more details.
  955.  * \{
  956.  */
  957.  
  958. /** #SND_PCM_TYPE_METER scope functions */
  959. typedef struct _snd_pcm_scope_ops {
  960.     /** \brief Enable and prepare it using current params
  961.      * \param scope scope handle
  962.      */
  963.     int (*enable)(snd_pcm_scope_t *scope);
  964.     /** \brief Disable
  965.      * \param scope scope handle
  966.      */
  967.     void (*disable)(snd_pcm_scope_t *scope);
  968.     /** \brief PCM has been started
  969.      * \param scope scope handle
  970.      */
  971.     void (*start)(snd_pcm_scope_t *scope);
  972.     /** \brief PCM has been stopped
  973.      * \param scope scope handle
  974.      */
  975.     void (*stop)(snd_pcm_scope_t *scope);
  976.     /** \brief New frames are present
  977.      * \param scope scope handle
  978.      */
  979.     void (*update)(snd_pcm_scope_t *scope);
  980.     /** \brief Reset status
  981.      * \param scope scope handle
  982.      */
  983.     void (*reset)(snd_pcm_scope_t *scope);
  984.     /** \brief PCM is closing
  985.      * \param scope scope handle
  986.      */
  987.     void (*close)(snd_pcm_scope_t *scope);
  988. } snd_pcm_scope_ops_t;
  989.  
  990. snd_pcm_uframes_t snd_pcm_meter_get_bufsize(snd_pcm_t *pcm);
  991. unsigned int snd_pcm_meter_get_channels(snd_pcm_t *pcm);
  992. unsigned int snd_pcm_meter_get_rate(snd_pcm_t *pcm);
  993. snd_pcm_uframes_t snd_pcm_meter_get_now(snd_pcm_t *pcm);
  994. snd_pcm_uframes_t snd_pcm_meter_get_boundary(snd_pcm_t *pcm);
  995. int snd_pcm_meter_add_scope(snd_pcm_t *pcm, snd_pcm_scope_t *scope);
  996. snd_pcm_scope_t *snd_pcm_meter_search_scope(snd_pcm_t *pcm, const char *name);
  997. int snd_pcm_scope_malloc(snd_pcm_scope_t **ptr);
  998. void snd_pcm_scope_set_ops(snd_pcm_scope_t *scope, snd_pcm_scope_ops_t *val);
  999. void snd_pcm_scope_set_name(snd_pcm_scope_t *scope, const char *val);
  1000. const char *snd_pcm_scope_get_name(snd_pcm_scope_t *scope);
  1001. void *snd_pcm_scope_get_callback_private(snd_pcm_scope_t *scope);
  1002. void snd_pcm_scope_set_callback_private(snd_pcm_scope_t *scope, void *val);
  1003. int snd_pcm_scope_s16_open(snd_pcm_t *pcm, const char *name,
  1004.                snd_pcm_scope_t **scopep);
  1005. int16_t *snd_pcm_scope_s16_get_channel_buffer(snd_pcm_scope_t *scope,
  1006.                           unsigned int channel);
  1007.  
  1008. /** \} */
  1009.  
  1010. /**
  1011.  * \defgroup PCM_Simple Simple setup functions
  1012.  * \ingroup PCM
  1013.  * See the \ref pcm page for more details.
  1014.  * \{
  1015.  */
  1016.  
  1017. /** Simple PCM latency type */
  1018. typedef enum _snd_spcm_latency {
  1019.     /** standard latency - for standard playback or capture
  1020.             (estimated latency in one direction 350ms) */
  1021.     SND_SPCM_LATENCY_STANDARD = 0,
  1022.     /** medium latency - software phones etc.
  1023.         (estimated latency in one direction maximally 25ms */
  1024.     SND_SPCM_LATENCY_MEDIUM,
  1025.     /** realtime latency - realtime applications (effect processors etc.)
  1026.         (estimated latency in one direction 5ms and better) */
  1027.     SND_SPCM_LATENCY_REALTIME
  1028. } snd_spcm_latency_t;
  1029.  
  1030. /** Simple PCM xrun type */
  1031. typedef enum _snd_spcm_xrun_type {
  1032.     /** driver / library will ignore all xruns, the stream runs forever */
  1033.     SND_SPCM_XRUN_IGNORE = 0,
  1034.     /** driver / library stops the stream when an xrun occurs */
  1035.     SND_SPCM_XRUN_STOP
  1036. } snd_spcm_xrun_type_t;
  1037.  
  1038. /** Simple PCM duplex type */
  1039. typedef enum _snd_spcm_duplex_type {
  1040.     /** liberal duplex - the buffer and period sizes might not match */
  1041.     SND_SPCM_DUPLEX_LIBERAL = 0,
  1042.     /** pedantic duplex - the buffer and period sizes MUST match */
  1043.     SND_SPCM_DUPLEX_PEDANTIC
  1044. } snd_spcm_duplex_type_t;
  1045.  
  1046. int snd_spcm_init(snd_pcm_t *pcm,
  1047.           unsigned int rate,
  1048.           unsigned int channels,
  1049.           snd_pcm_format_t format,
  1050.           snd_pcm_subformat_t subformat,
  1051.           snd_spcm_latency_t latency,
  1052.           snd_pcm_access_t _access,
  1053.           snd_spcm_xrun_type_t xrun_type);
  1054.  
  1055. int snd_spcm_init_duplex(snd_pcm_t *playback_pcm,
  1056.              snd_pcm_t *capture_pcm,
  1057.              unsigned int rate,
  1058.              unsigned int channels,
  1059.              snd_pcm_format_t format,
  1060.              snd_pcm_subformat_t subformat,
  1061.              snd_spcm_latency_t latency,
  1062.              snd_pcm_access_t _access,
  1063.              snd_spcm_xrun_type_t xrun_type,
  1064.              snd_spcm_duplex_type_t duplex_type);
  1065.  
  1066. int snd_spcm_init_get_params(snd_pcm_t *pcm,
  1067.                  unsigned int *rate,
  1068.                  snd_pcm_uframes_t *buffer_size,
  1069.                  snd_pcm_uframes_t *period_size);
  1070.  
  1071. /** \} */
  1072.  
  1073. /**
  1074.  * \defgroup PCM_Deprecated Deprecated Functions
  1075.  * \ingroup PCM
  1076.  * See the \ref pcm page for more details.
  1077.  * \{
  1078.  */
  1079.  
  1080. /* Deprecated functions, for compatibility */
  1081. const char *snd_pcm_start_mode_name(snd_pcm_start_t mode);
  1082. const char *snd_pcm_xrun_mode_name(snd_pcm_xrun_t mode);
  1083. int snd_pcm_sw_params_set_start_mode(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_start_t val);
  1084. snd_pcm_start_t snd_pcm_sw_params_get_start_mode(const snd_pcm_sw_params_t *params);
  1085. int snd_pcm_sw_params_set_xrun_mode(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_xrun_t val);
  1086. snd_pcm_xrun_t snd_pcm_sw_params_get_xrun_mode(const snd_pcm_sw_params_t *params);
  1087.  
  1088. /** \} */
  1089.  
  1090. #ifdef __cplusplus
  1091. }
  1092. #endif
  1093.  
  1094. #endif /* __ALSA_PCM_H */
  1095.